#ifndef MESSAGESHOWAREA_H
#define MESSAGESHOWAREA_H

#include <QScrollArea>
#include <QWidget>
#include <QScrollBar>
#include <QVBoxLayout>
#include <QByteArray>
#include <QPushButton>
#include <QLabel>
#include <QFont>
#include <QPaintEvent>
#include <QFontMetrics>

#include "model/data.h"

////////////////////////////////////////
/// 消息的区域
//////////////////////////////////////////
class MessageShowArea : public QScrollArea
{
    Q_OBJECT
public:
    MessageShowArea();
private:
    QWidget *container;
};

////////////////////////////////////////
/// 消息Item
//////////////////////////////////////////

class MessageItem : public QWidget{
    Q_OBJECT
public:
    MessageItem(bool isLeft);


    // 通过工厂模式构造函数
    static MessageItem* makeMessageItem(bool isLeft, const MessageItem& message);

    // 添加工厂函数
    static QWidget* makeTextMessageItem(bool isLeft, const QString& text);
    static QWidget* makeImageMessageItem(bool isLeft, const QString& fileId, const QByteArray& content);
    static QWidget* makeFileMessageItem(bool isLeft, const QString& message);
    static QWidget* makeSpeechMessageItem(bool isLeft, const QString& message);
private:
    bool isLeft;
};

////////////////////////////////////////
/// 消息Item中的文本消息的正文部分
//////////////////////////////////////////

class MessageContentLabel : public QWidget{

public:
    MessageContentLabel(const QString& text, bool isLeft);

    void painEvent(QPaintEvent* event);
private:
    QLabel* _label;
    bool _isLeft;
};



#endif // MESSAGESHOWAREA_H
